Appearance
Git 中关于分支管理的基础操作:新建分支、切换分支 和 删除分支。这些是日常开发中使用频率极高的命令。
核心概念回顾:**
- 分支 (Branch): Git 的核心功能之一。它允许你在一个独立于主开发线(通常是
main或master)的路径上进行开发,不会影响主线代码。非常适合开发新功能、修复 Bug 或尝试新想法。 - HEAD: 一个特殊的指针,指向你当前正在工作的分支(或具体的提交)。当你切换分支时,
HEAD会跟着移动。 - 工作目录 (Working Directory): 你电脑上看到的项目文件目录。
- 暂存区 (Staging Area / Index): 准备提交的文件集合。
新建分支
创建一个新分支意味着你基于某个起点(通常是当前所在分支的最新提交)开辟了一条新的开发线。
命令:
git branch <new-branch-name>-
<new-branch-name>: 你想要创建的新分支的名称。选择一个有意义且描述性强的名字很重要(例如feature/user-authentication,bugfix/login-error,experiment/new-algorithm)。 - 执行后:
- 在 Git 的内部数据库中创建了一个指向当前所在分支最新提交的新指针。
- 重要:这个命令 不会 自动切换到新分支! 你仍然停留在原来的分支上。
示例:
# 假设当前在 main 分支
git branch feature/add-search
# 此时创建了名为 feature/add-search 的新分支,但 HEAD 仍然指向 main常用选项:
git checkout -b <new-branch-name>: 这是一个非常常用的快捷命令。它等价于先执行git branch <new-branch-name>然后立即执行git checkout <new-branch-name>。一步完成创建并切换到新分支。git checkout -b feature/add-search # 创建 feature/add-search 分支并立即切换到它
切换分支
切换分支意味着将你的工作目录和 HEAD 指针移动到指定的分支。工作目录中的文件会自动更新,以匹配目标分支的最新提交状态。
命令:
git checkout <branch-name>-
<branch-name>: 你想要切换到的已存在分支的名称。 - 执行前注意事项:
- 工作目录必须干净! 这是最重要的规则。在切换分支前:
- 提交 (
git commit) 你当前分支上所有希望保留的修改。 - 或者,使用
git stash将未提交的修改暂时储藏起来(之后可以在其他分支恢复)。
- 提交 (
- 如果工作目录或暂存区有未提交的修改,并且这些修改与目标分支上的文件有冲突,Git 会阻止你切换,并提示你先处理这些修改(提交、储藏或丢弃)。
- 工作目录必须干净! 这是最重要的规则。在切换分支前:
- 执行后:
HEAD指针移动到<branch-name>分支。- 工作目录中的文件被替换为目标分支的最新快照。
- 后续的提交操作将在新切换到的分支上进行。
示例:
# 从 main 分支切换到已存在的 feature/add-search 分支
git checkout feature/add-search
# 现在 HEAD 指向 feature/add-search,工作目录是 feature/add-search 的内容现代替代命令 (推荐):
git switch <branch-name>: Git 2.23 版本引入了更专注于切换分支的命令git switch,语义更清晰,与git checkout的部分功能(如恢复文件)分离,减少了混淆。git switch feature/add-search
删除分支
当你完成了一个分支上的工作(例如,功能开发完毕并合并回主分支),或者决定放弃某个实验性分支时,可以删除它,以保持仓库的整洁。
命令:
git branch -d <branch-name>
<branch-name>: 你想要删除的分支的名称。重要限制:
- 你不能删除你当前所在的分支(
HEAD指向的分支)。必须先切换到其他分支(如main)。 - 如果目标分支包含尚未合并到当前分支(或你指定的其他分支)的更改,Git 会拒绝删除,以防止丢失工作。它会提示类似
error: The branch 'branch-name' is not fully merged的错误。
- 你不能删除你当前所在的分支(
强制删除 (慎用!):
如果你确定要删除一个包含未合并更改的分支(比如一个彻底失败的实验),可以使用
-D(大写) 选项强制删除:git branch -D <branch-name>警告: 强制删除会永久丢失该分支上所有未合并的提交!请确保你真的不再需要这些更改。
示例:
# 1. 确保不在要删除的分支上 (比如先切回 main)
git switch main
# 2. 安全删除 (如果分支已合并)
git branch -d feature/add-search
# 3. 强制删除 (如果分支未合并且确定要丢弃)
git branch -D experiment/failed-idea常见场景(切换分支-总结)
开始新功能开发:
git checkout main # 确保在基础分支 (如 main) git pull # 获取最新代码 git checkout -b feature/xyz # 创建并切换到新功能分支 feature/xyz # ... 在 feature/xyz 上进行开发、提交 ...修复紧急 Bug:
git checkout main # 确保在基础分支 git pull git checkout -b hotfix/abc # 创建并切换到热修复分支 hotfix/abc # ... 在 hotfix/abc 上修复 Bug、提交 ...完成分支工作后:
git checkout main # 切换回主分支 git merge feature/xyz # 将 feature/xyz 合并到 main (或通过 Pull Request) git branch -d feature/xyz # 删除已合并的 feature/xyz 分支
其他
查看分支信息
-
git branch: 列出所有本地分支。当前分支前面会有一个*号。 -
git branch -v: 列出分支并显示每个分支最新的提交信息。 -
git branch -a: 列出所有本地分支和远程跟踪分支 (以remotes/开头)。 -
git log --oneline --decorate --graph --all: 以图形化方式查看所有分支的提交历史。
关键要点
-
git branch <name>只创建不切换。 -
git checkout -b <name>或git switch -c <name>是创建并切换的快捷方式。 - 切换分支 (
checkout/switch) 前务必保证工作目录干净。 - 删除分支 (
branch -d) 前确保:- 不在该分支上。
- 该分支的更改已合并(除非强制删除
-D)。
- 强制删除 (
-D) 会丢失未合并的提交,务必谨慎! - 使用
git switch代替git checkout来切换分支是更现代、更清晰的做法。
熟练掌握这些分支操作是高效使用 Git 进行协作开发的基础。记得经常使用 git status 和 git branch 来查看当前状态。